package kt04.simple4

class MyStudentGet<out T>(_item: T) {
    private val item = _item
    fun get(): T = item

}

class MyStudentSet<in T>() {
    fun set(value: T) = print("你传递进来的内容是$value")
}

class StudentSetGet<in I, out O> {
    private var item: I? = null
    fun set(value: I) {
        println("你传递进来的内容是$value")
        item = value
    }

    fun get() = item as? O
}

fun main() {
//     生产者 协变  ? extends T  或者 out T
    val stu = MyStudentGet("DDDDD")
    println(stu.get())

    val stu2 = MyStudentSet<Double>()
    stu2.set(99.22)
    // 消费者 逆变 ? super T 或者 in T        +        生产者 协变  ? extends T  或者 out T
    val stu3 =StudentSetGet<String,String>()
    stu3.set("九阳神功")// 消费者
    println(stu3.get())// 生产者
}